﻿#region Copyright & License
//
// Project: Quark Framework
// Project site: http://quark.codeplex.com
// See the copyright statement on the project site for more details.
//
// Licensed to the Apache Software Foundation (ASF) under one or more 
// contributor license agreements. See the NOTICE file distributed with
// this work for additional information regarding copyright ownership. 
// The ASF licenses this file to you under the Apache License, Version 2.0
// (the "License"); you may not use this file except in compliance with 
// the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
#endregion

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Quark.Framework.Exceptions;

namespace Quark.Framework
{
    /// <summary>
    /// 表示对象实例可接受运行时参数传入
    /// </summary>
    public interface IParameterizable
    {
        /// <summary>
        /// 对当前对象实例进行参数化
        /// </summary>
        /// <param name="parameters">运行时传入参数</param>
        /// <exception cref="ArgumentNullException"><paramref name="parameters"/>参数为空值</exception>
        /// <exception cref="ArgumentException"><paramref name="parameters"/>参数为空集合</exception>
        /// <exception cref="ParameterizeException">参数化失败，内部抛出的异常统一以<see cref="ParameterizeException"/>作为异常封装</exception>
        /// <remarks>
        /// 本方法通常用于在运行期间对当前对象实例进行参数配置修改，用于改变运行时行为或模式等
        /// </remarks>
        /// <threadsafety/>
        void Parameterize(IDictionary<string, object> parameters);
    }
}
